/**
 * 存储相关常量定义
 * @description 定义本地存储键名、版本管理和配置常量
 */

/**
 * 本地存储键名常量
 * @description 统一管理所有本地存储的键名
 */
export const STORAGE_KEYS = {
  /** 学生数据存储键 */
  STUDENTS: 'course_schedule_students',
  /** 课程数据存储键 */
  COURSES: 'course_schedule_courses',
  /** 课程分类数据存储键 */
  COURSE_CATEGORIES: 'course_schedule_course_categories',
  /** 课程安排模板数据存储键 */
  SCHEDULE_TEMPLATES: 'course_schedule_templates',
  /** 课程实例数据存储键 */
  SCHEDULE_INSTANCES: 'course_schedule_instances',
  /** 应用设置存储键 */
  APP_SETTINGS: 'course_schedule_app_settings',
  /** 用户偏好设置存储键 */
  USER_PREFERENCES: 'course_schedule_user_preferences',
  /** 主题设置存储键 */
  THEME_SETTINGS: 'course_schedule_theme_settings',
  /** 数据版本存储键 */
  DATA_VERSION: 'course_schedule_data_version',
  /** 数据备份存储键前缀 */
  BACKUP_PREFIX: 'course_schedule_backup_',
  /** 临时数据存储键前缀 */
  TEMP_PREFIX: 'course_schedule_temp_',
  /** 缓存数据存储键前缀 */
  CACHE_PREFIX: 'course_schedule_cache_'
} as const;

/**
 * 会话存储键名常量
 * @description 定义会话级别的存储键名
 */
export const SESSION_STORAGE_KEYS = {
  /** 当前选中的学生ID列表 */
  SELECTED_STUDENTS: 'course_schedule_selected_students',
  /** 当前视图状态 */
  CURRENT_VIEW_STATE: 'course_schedule_current_view_state',
  /** 搜索历史 */
  SEARCH_HISTORY: 'course_schedule_search_history',
  /** 表单草稿数据 */
  FORM_DRAFT: 'course_schedule_form_draft',
  /** 页面滚动位置 */
  SCROLL_POSITION: 'course_schedule_scroll_position'
} as const;

/**
 * 数据版本常量
 * @description 用于数据迁移和兼容性管理
 */
export const DATA_VERSION = {
  /** 当前数据版本 */
  CURRENT: '1.0.0',
  /** 支持的最低版本 */
  MIN_SUPPORTED: '1.0.0',
  /** 版本格式正则表达式 */
  VERSION_REGEX: /^\d+\.\d+\.\d+$/,
  /** 默认版本（用于新安装） */
  DEFAULT: '1.0.0'
} as const;

/**
 * 数据迁移相关常量
 * @description 定义数据迁移过程中使用的常量
 */
export const DATA_MIGRATION = {
  /** 迁移状态键 */
  MIGRATION_STATUS_KEY: 'course_schedule_migration_status',
  /** 迁移日志键 */
  MIGRATION_LOG_KEY: 'course_schedule_migration_log',
  /** 迁移备份键前缀 */
  MIGRATION_BACKUP_PREFIX: 'course_schedule_migration_backup_',
  /** 最大迁移重试次数 */
  MAX_RETRY_COUNT: 3,
  /** 迁移超时时间（毫秒） */
  MIGRATION_TIMEOUT: 30000,
  /** 迁移状态枚举 */
  STATUS: {
    /** 未开始 */
    PENDING: 'pending',
    /** 进行中 */
    IN_PROGRESS: 'in_progress',
    /** 已完成 */
    COMPLETED: 'completed',
    /** 失败 */
    FAILED: 'failed',
    /** 已跳过 */
    SKIPPED: 'skipped'
  }
} as const;

/**
 * 存储配置常量
 * @description 定义存储相关的配置参数
 */
export const STORAGE_CONFIG = {
  /** 数据过期时间配置（毫秒） */
  EXPIRATION: {
    /** 永不过期 */
    NEVER: -1,
    /** 1小时 */
    ONE_HOUR: 60 * 60 * 1000,
    /** 1天 */
    ONE_DAY: 24 * 60 * 60 * 1000,
    /** 1周 */
    ONE_WEEK: 7 * 24 * 60 * 60 * 1000,
    /** 1个月 */
    ONE_MONTH: 30 * 24 * 60 * 60 * 1000,
    /** 3个月 */
    THREE_MONTHS: 90 * 24 * 60 * 60 * 1000
  },
  /** 存储大小限制配置（字节） */
  SIZE_LIMITS: {
    /** 单个数据项最大大小（1MB） */
    MAX_ITEM_SIZE: 1024 * 1024,
    /** 总存储最大大小（10MB） */
    MAX_TOTAL_SIZE: 10 * 1024 * 1024,
    /** 警告阈值（8MB） */
    WARNING_THRESHOLD: 8 * 1024 * 1024,
    /** 清理阈值（9MB） */
    CLEANUP_THRESHOLD: 9 * 1024 * 1024
  },
  /** 备份配置 */
  BACKUP: {
    /** 最大备份数量 */
    MAX_BACKUP_COUNT: 5,
    /** 备份间隔时间（毫秒） */
    BACKUP_INTERVAL: 24 * 60 * 60 * 1000, // 1天
    /** 自动备份开关 */
    AUTO_BACKUP_ENABLED: true,
    /** 备份压缩开关 */
    COMPRESSION_ENABLED: true
  },
  /** 缓存配置 */
  CACHE: {
    /** 默认缓存时间（毫秒） */
    DEFAULT_TTL: 5 * 60 * 1000, // 5分钟
    /** 最大缓存项数量 */
    MAX_CACHE_ITEMS: 100,
    /** 缓存清理间隔（毫秒） */
    CLEANUP_INTERVAL: 10 * 60 * 1000, // 10分钟
    /** 缓存命中率统计开关 */
    STATS_ENABLED: true
  }
} as const;

/**
 * 存储错误代码常量
 * @description 定义存储操作可能出现的错误代码
 */
export const STORAGE_ERROR_CODES = {
  /** 存储空间不足 */
  QUOTA_EXCEEDED: 'QUOTA_EXCEEDED',
  /** 数据格式错误 */
  INVALID_DATA_FORMAT: 'INVALID_DATA_FORMAT',
  /** 版本不兼容 */
  VERSION_INCOMPATIBLE: 'VERSION_INCOMPATIBLE',
  /** 数据损坏 */
  DATA_CORRUPTED: 'DATA_CORRUPTED',
  /** 迁移失败 */
  MIGRATION_FAILED: 'MIGRATION_FAILED',
  /** 备份失败 */
  BACKUP_FAILED: 'BACKUP_FAILED',
  /** 恢复失败 */
  RESTORE_FAILED: 'RESTORE_FAILED',
  /** 权限不足 */
  PERMISSION_DENIED: 'PERMISSION_DENIED',
  /** 网络错误 */
  NETWORK_ERROR: 'NETWORK_ERROR',
  /** 未知错误 */
  UNKNOWN_ERROR: 'UNKNOWN_ERROR'
} as const;

/**
 * 存储事件类型常量
 * @description 定义存储相关的事件类型
 */
export const STORAGE_EVENTS = {
  /** 数据变更事件 */
  DATA_CHANGED: 'storage:data_changed',
  /** 存储空间警告事件 */
  QUOTA_WARNING: 'storage:quota_warning',
  /** 数据迁移开始事件 */
  MIGRATION_START: 'storage:migration_start',
  /** 数据迁移完成事件 */
  MIGRATION_COMPLETE: 'storage:migration_complete',
  /** 数据迁移失败事件 */
  MIGRATION_FAILED: 'storage:migration_failed',
  /** 备份创建事件 */
  BACKUP_CREATED: 'storage:backup_created',
  /** 数据恢复事件 */
  DATA_RESTORED: 'storage:data_restored',
  /** 缓存清理事件 */
  CACHE_CLEARED: 'storage:cache_cleared'
} as const;

/**
 * 预设数据标识常量
 * @description 定义系统预设数据的标识
 */
export const PRESET_DATA_IDS = {
  /** 预设课程分类ID前缀 */
  COURSE_CATEGORY_PREFIX: 'preset_category_',
  /** 预设课程ID前缀 */
  COURSE_PREFIX: 'preset_course_',
  /** 预设时间段ID前缀 */
  TIME_SLOT_PREFIX: 'preset_time_slot_',
  /** 系统管理员ID */
  SYSTEM_ADMIN_ID: 'system_admin',
  /** 默认设置ID */
  DEFAULT_SETTINGS_ID: 'default_settings'
} as const;

/**
 * 存储键类型定义
 * @description 提供类型安全的存储键访问
 */
export type StorageKey = typeof STORAGE_KEYS[keyof typeof STORAGE_KEYS];
export type SessionStorageKey = typeof SESSION_STORAGE_KEYS[keyof typeof SESSION_STORAGE_KEYS];
export type StorageErrorCode = typeof STORAGE_ERROR_CODES[keyof typeof STORAGE_ERROR_CODES];
export type StorageEvent = typeof STORAGE_EVENTS[keyof typeof STORAGE_EVENTS];